package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloCurso;
import com.ipartek.formacion.gestformwww.modelo.beans.*;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.*;

/**
 *
 * @author Alvaro y Borja
 */
public class ListarCursoAccion implements Accion {

    /**
     * Descripción: ejecuta la acción de listado de los cursos
     * @param servlet
     * @param request
     * @param response
     * @return devuelve el router que dirige a la página que corresponda (a Inicio o a Principal)
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion = request.getSession(false);
        AccionRouter router = null;
        FiltroCurso filtro = null;
        int numPags;
        int numerocursos = 0;
        ArrayList<Curso> cursos = null;
        ArrayList<TipoCurso> tiposcurso=null;
        ModeloCurso modelo = (ModeloCurso) servlet.getServletContext().getAttribute("ModeloCurso");
        ResourceBundle bundle = (ResourceBundle) servlet.getServletContext().getAttribute("acciones-mapeo");
        if (sesion.getAttribute("usuario") != null) {
            if (sesion.getAttribute("filtrocursos") != null) {
                filtro = (FiltroCurso) sesion.getAttribute("filtrocursos");
            } else {
                filtro = new FiltroCurso(bundle);
            }
            
            filtro.setNombre(request.getParameter("filtroNombreCurso"));
            filtro.setEstado(request.getParameter("filtroEstado"));
            filtro.setTipo(request.getParameter("filtroTipoCurso"));
            filtro.setCliente(request.getParameter("filtroCliente"));
            filtro.setFechainiciocom(request.getParameter("filtroFInicio"));
            filtro.setFechainiciofin(request.getParameter("filtroFInicioFin"));
            filtro.setFechafincom(request.getParameter("filtroFFin"));
            filtro.setFechafinfin(request.getParameter("filtroFFinFin"));
            filtro.setLugar(request.getParameter("filtroLugar"));
            filtro.setDuracion(request.getParameter("filtroDuracion"));
            filtro.setColumnafiltrar(request.getParameter("filtroColumna"));
            filtro.setOrden(request.getParameter("filtroOrden"));
            filtro.setElementospag(request.getParameter("RegistroPagina"));
            filtro.setPagsiguiente(request.getParameter("id"));
            sesion.setAttribute("filtrocursos", filtro);

            try {
                cursos = modelo.listarCursos(filtro);
                numerocursos = modelo.contarCursos(filtro);
                tiposcurso = modelo.listarTipoCurso();
            } catch (GestorFormacionExcepcion ex) {
                Logger.getLogger(ListarCursoAccion.class.getName()).log(Level.SEVERE, null, ex);
                sesion.setAttribute("excepciones", ex.getMessage());
            }

            request.setAttribute("listaCursos", cursos);
            request.setAttribute("listarTipoCurso", tiposcurso);

            numPags = filtro.getElementospag();

            if (numerocursos == 0) {
                ResourceBundle errores = (ResourceBundle) servlet.getServletContext().getAttribute("errores-mapeo");
                request.setAttribute("error", errores.getString("error-sin-resultados"));
            }
            request.setAttribute("numeroCursos", numerocursos);
            int totalpaginas = numerocursos / numPags;
            if ((numerocursos % numPags) != 0) {
                totalpaginas++;
            }
            request.setAttribute("totalPagCursos", totalpaginas);
            request.setAttribute("contenido", "lista-cursos");
            router = new AccionRouter("principal");
        } else {
            router = new AccionRouter("inicio", false);
        }
        return router;
    }

    public void inicializa(AccionFactory factory) {
    }
}
